package hotel;

import java.awt.Component;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.*;
import java.util.GregorianCalendar;

import javax.swing.*;


public class FinestraStatistiche extends JFrame implements ActionListener{
	private ResultSet rs=null;
	private JPanel pannello;
	private JTextField numClienti;
	private JTextField numClientiAnno;
	private JTextField numClientiAnnoP;
	private JTextField numClientiProv;
	private JTextField numStorico;
	private JTextField numStoricoMeseCorrente;
	private JLabel clienti;
	private JLabel clientiAnno;
	private JLabel clientiAnnoP;
	private JLabel clientiProv;
	private JLabel numStoricoL;
	private JLabel numStoricoMeseCorrenteL;
	private GregorianCalendar gc = new GregorianCalendar();
	private String annoCorrente=Integer.toString(gc.get(GregorianCalendar.YEAR));
	private String meseCorrente=Integer.toString(gc.get(GregorianCalendar.MONTH)+1);
	private String annoPrecedente=Integer.toString(gc.get(GregorianCalendar.YEAR)-1);
	private String[] mesiS = { "Gennaio", "Febbraio", "Marzo", "Aprile",
			"Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre",
			"Novembre", "Dicembre" };
	private String[] anniS = new String[15];
	private JComboBox mesi;
	private JComboBox anni;
	private int annoCorrenteI = gc.get(GregorianCalendar.YEAR);
	private JTextField meseSelezionato;

	public FinestraStatistiche(){
		Image immagineIc = Toolkit.getDefaultToolkit().getImage(
				"Risorse/statistiche1.png");
		setIconImage(immagineIc);
		setTitle("Statistiche Clienti");
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setLocation(350, 250);
		setResizable(false);
		this.setVisible(true);
		for (int i = 0; i < anniS.length; i++) {
			anniS[i] = Integer.toString(annoCorrenteI - i);
		}
		mesi=new JComboBox(mesiS);
		anni=new JComboBox(anniS);
		mesi.setSelectedItem(mesiS[gc.get(GregorianCalendar.MONTH)]);
		anni.setSelectedItem(gc.get(GregorianCalendar.YEAR));
		anni.setActionCommand(""+1);
		anni.addActionListener(this);
		mesi.setActionCommand(""+1);
		mesi.addActionListener(this);
		pannello = new JPanel();
		pannello.setLayout(new GridLayout(0,2));
		clienti=new JLabel("Clienti registrati:");
		pannello.add(clienti);
		numClienti=new JTextField(5);
		numClienti.setEditable(false);
		pannello.add(numClienti);
		clientiAnno=new JLabel("Clienti Registrati Anno Corrente "+annoCorrente);
		pannello.add(clientiAnno);
		numClientiAnno=new JTextField(5);
		numClientiAnno.setEditable(false);
		pannello.add(numClientiAnno);
		clientiAnnoP=new JLabel("Clienti Registrati Anno "+annoPrecedente);
		pannello.add(clientiAnnoP);
		numClientiAnnoP=new JTextField(5);
		numClientiAnnoP.setEditable(false);
		pannello.add(numClientiAnnoP);
		clientiProv=new JLabel("Clienti Provincia CS:");
		pannello.add(clientiProv);
		numClientiProv=new JTextField(5);
		numClientiProv.setEditable(false);
		pannello.add(numClientiProv);
		numStoricoL=new JLabel("Clienti presenti nello storico:");
		pannello.add(numStoricoL);
		numStorico=new JTextField(5);
		numStorico.setEditable(false);
		pannello.add(numStorico);
		numStoricoMeseCorrenteL=new JLabel("Presenze Clienti del mese corrente:");
		pannello.add(numStoricoMeseCorrenteL);
		numStoricoMeseCorrente=new JTextField(5);
		numStoricoMeseCorrente.setEditable(false);
		pannello.add(numStoricoMeseCorrente);
		pannello.add(new JLabel("Presenze Clienti mese:"));
		meseSelezionato=new JTextField(5);
		meseSelezionato.setEditable(false);
		pannello.add(meseSelezionato);
		pannello.add(mesi);
		pannello.add(anni);
		try {
			rs=GraficaHotel.database.stat.executeQuery("SELECT count(*) FROM CLIENTI");
			rs.next();
			numClienti.setText(rs.getString(1));
			rs=GraficaHotel.database.stat.executeQuery("select count(*) from clienti where datadiarrivo between '"+annoCorrente+"/01/01' and '"+annoCorrente+"/12/01'");
			rs.next();
			numClientiAnno.setText(rs.getString(1));
			rs=GraficaHotel.database.stat.executeQuery("select count(*) from clienti where datadiarrivo between '"+annoPrecedente+"/01/01' and '"+annoPrecedente+"/12/01'");
			rs.next();
			numClientiAnnoP.setText(rs.getString(1));
			rs=GraficaHotel.database.stat.executeQuery("SELECT count(*) from clienti where provinciadiresidenza='CS'");
			rs.next();
			numClientiProv.setText(rs.getString(1));
			rs=GraficaHotel.database.stat.executeQuery("SELECT count(*) from storico");
			rs.next();
			numStorico.setText(rs.getString(1));
			rs=GraficaHotel.database.stat.executeQuery("SELECT count(*) from storico where dataarrivo between '"+annoCorrente+"/"+meseCorrente+"/01' and '"+annoCorrente+"/"+meseCorrente+"/31'");
			rs.next();
			numStoricoMeseCorrente.setText(rs.getString(1));
			rs=GraficaHotel.database.stat.executeQuery("SELECT count(*) from storico where dataarrivo between '"+anni.getSelectedItem()+"/"+trova((String) mesi.getSelectedItem())+"/01' and '"+anni.getSelectedItem()+"/"+trova((String) mesi.getSelectedItem())+"/31'");
			rs.next();
			meseSelezionato.setText(rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}
		add(pannello);
		this.pack();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if( e.getSource() instanceof JComboBox && e.getActionCommand().equals("1")) {
			try {
				String query="SELECT count(*) from storico where dataarrivo between '"+anni.getSelectedItem()+"/"+trova((String) mesi.getSelectedItem())+"/01' and '"+anni.getSelectedItem()+"/"+trova((String) mesi.getSelectedItem())+"/31'";
				rs=GraficaHotel.database.stat.executeQuery(query);
				rs.next();
				meseSelezionato.setText(rs.getString(1));
			} catch (SQLException e1) {
				e1.printStackTrace();
			}	
		}
	}

	private String trova(String mese) {
		if (mese.equals("Gennaio"))
			return "01";
		else if (mese.equals("Febbraio"))
			return "02";
		else if (mese.equals("Marzo"))
			return "03";
		else if (mese.equals("Aprile"))
			return "04";
		else if (mese.equals("Maggio"))
			return "05";
		else if (mese.equals("Giugno"))
			return "06";
		else if (mese.equals("Luglio"))
			return "07";
		else if (mese.equals("Agosto"))
			return "08";
		else if (mese.equals("Settembre"))
			return "09";
		else if (mese.equals("Ottobre"))
			return "10";
		else if (mese.equals("Novembre"))
			return "11";
		else
			return "12";
	}
	
}
